package com.chinatechstar.base.service;

import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.chinatechstar.base.dto.SysWellTrackDTO;
import com.chinatechstar.base.dto.UploadDailyOilProdDTO;
import com.chinatechstar.base.entity.SysWell;
import org.springframework.web.multipart.MultipartFile;

/**
 * 业务逻辑接口层
 */
public interface SysWellService {

    /**
     * 查询所有数据
     *
     * @return List<SysWell>
     */
    List<SysWell> findSysWellAll();

    /**
     * 查询不分页数据
     *
     * @param wellOrgId      生产单位ID
     * @param wellAreaId     区块ID
     * @param wellCommonName 井通用名称
     * @return List<SysWell>
     */
    List<SysWell> findWellListByCondition(Long wellOrgId, Long wellAreaId, String wellCommonName);

    /**
     * 查询井区块不分页数据
     *
     * @param wellAreaName 井通用名称
     * @return List<SysWell>
     */
    List<SysWell> findWellAreaNameByCondition(String wellAreaName);

    /**
     * 查询分页
     *
     * @param currentPage    当前页数
     * @param pageSize       每页记录数
     * @param wellOrgId      生产单位ID
     * @param wellAreaId     区块ID
     * @param wellCommonName 井通用名称
     * @param sorter         排序
     * @return Map<String, Object>
     */
    Map<String, Object> findSysWellByCondition(Integer currentPage, Integer pageSize, Long wellOrgId, Long wellAreaId, String wellCommonName, String sorter);

    /**
     * 查询导出数据列表
     *
     * @param paramMap 参数Map
     * @return List<LinkedHashMap < String, Object>>
     */
    List<LinkedHashMap<String, Object>> findSysWellForExcel(Map<String, Object> paramMap);

    /**
     * 根据主键ID数据查询数据
     *
     * @param id ID
     * @return SysWell
     */
    SysWell findSysWellById(Long id);

    /**
     * 根据主键ID数组查询数据
     *
     * @param ids ID数组
     * @return List<SysWell>
     */
    List<SysWell> findSysWellByIds(Long[] ids);

    /**
     * 根据时间和气体介质查询CO2吞吐效果跟踪数据
     *
     * @param date 时间字符串
     * @param dict 气体介质
     * @return List<LinkedHashMap < String, Object>>
     */
    List<LinkedHashMap<String, Object>> findSysWellTrackByDateAndGasMedium(String date, String dict);

    /**
     * 查询所有注气吞吐实施的井
     *
     * @return List<SysWell>
     */
    List<SysWell> findSysWellWithAllImpl();

    /**
     * 查询目前正在进行注气吞吐实施的井
     *
     * @return List<SysWell>
     */
    List<SysWell> findSysWellWithImpl();

    /**
     * 新增
     *
     * @param sysWell 实体
     */
    void insertSysWell(SysWell sysWell);

    /**
     * 批量新增
     *
     * @param sysWells 实体数组
     */
    void insertSysWells(List<SysWell> sysWells);

    /**
     * 编辑
     *
     * @param sysWell 实体
     */
    void updateSysWell(SysWell sysWell);

    /**
     * 编辑油井产状数据
     *
     * @param dto 油井产状
     */
    void updateOilProdTrack(SysWellTrackDTO dto);

    /**
     * 批量编辑
     *
     * @param sysWells 实体数组
     */
    void updateSysWells(List<SysWell> sysWells);

    /**
     * 删除
     *
     * @param id ID
     */
    void deleteSysWellById(Long id);

    /**
     * 批量删除
     *
     * @param ids ID数组
     */
    void deleteSysWellByIds(Long[] ids);

    /**
     * 软删除
     *
     * @param id ID
     */
    void softDeleteSysWellById(Long id);

    /**
     * 批量软删除
     *
     * @param ids ID数组
     */
    void softDeleteSysWellByIds(Long[] ids);

    /**
     * 导入每日油井产状，并计算CO2吞吐效果
     *
     * @param dto 数据dto
     * @return List<String>
     * @throws IOException IOException
     */
    List<String> uploadDailyOilProd(UploadDailyOilProdDTO dto) throws IOException;

    /**
     * 导入CO2吞吐效果追踪表基础数据
     *
     * @param file 文件资源
     * @param dict 数据字典
     * @return List<String>
     * @throws IOException IOException
     */
    List<String> uploadCo2EffectTrack(MultipartFile file, String dict) throws IOException;
}
